package ar.org.sstuyv.regularizacion

import grails.converters.JSON

import org.springframework.dao.DataIntegrityViolationException

class OrigenIURegularizacionController {

	static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

	def index() {
		redirect(action: "list", params: params)
	}

	def list(Integer max) {
		params.max = Math.min(max ?: 10, 100)
		[origenIURegularizacionInstanceList: OrigenIURegularizacion.list(params), origenIURegularizacionInstanceTotal: OrigenIURegularizacion.count()]
	}

	def create() {
		[origenIURegularizacionInstance: new OrigenIURegularizacion(params)]
	}

	//    def save() {
	//        def origenIURegularizacionInstance = new OrigenIURegularizacion(params)
	//        if (!origenIURegularizacionInstance.save(flush: true)) {
	//            render(view: "create", model: [origenIURegularizacionInstance: origenIURegularizacionInstance])
	//            return
	//        }
	//
	//        flash.message = message(code: 'default.created.message', args: [message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion'), origenIURegularizacionInstance.id])
	//        redirect(action: "show", id: origenIURegularizacionInstance.id)
	//    }

	def show(Long id) {
		def origenIURegularizacionInstance = OrigenIURegularizacion.get(id)
		if (!origenIURegularizacionInstance) {
			flash.message = message(code: 'default.not.found.message', args: [
				message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion'),
				id
			])
			redirect(action: "list")
			return
		}

		[origenIURegularizacionInstance: origenIURegularizacionInstance]
	}

	def edit(Long id) {
		def origenIURegularizacionInstance = OrigenIURegularizacion.get(id)
		if (!origenIURegularizacionInstance) {
			flash.message = message(code: 'default.not.found.message', args: [
				message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion'),
				id
			])
			redirect(action: "list")
			return
		}

		[origenIURegularizacionInstance: origenIURegularizacionInstance]
	}

	//    def update(Long id, Long version) {
	//        def origenIURegularizacionInstance = OrigenIURegularizacion.get(id)
	//        if (!origenIURegularizacionInstance) {
	//            flash.message = message(code: 'default.not.found.message', args: [message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion'), id])
	//            redirect(action: "list")
	//            return
	//        }
	//
	//        if (version != null) {
	//            if (origenIURegularizacionInstance.version > version) {
	//                origenIURegularizacionInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
	//                          [message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion')] as Object[],
	//                          "Another user has updated this OrigenIURegularizacion while you were editing")
	//                render(view: "edit", model: [origenIURegularizacionInstance: origenIURegularizacionInstance])
	//                return
	//            }
	//        }
	//
	//        origenIURegularizacionInstance.properties = params
	//
	//        if (!origenIURegularizacionInstance.save(flush: true)) {
	//            render(view: "edit", model: [origenIURegularizacionInstance: origenIURegularizacionInstance])
	//            return
	//        }
	//
	//        flash.message = message(code: 'default.updated.message', args: [message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion'), origenIURegularizacionInstance.id])
	//        redirect(action: "show", id: origenIURegularizacionInstance.id)
	//    }

	def save() {

		if (!params.nombre){
			if(params.id == "_empty") {
				redirect(controller: 'IIUURegularizacion', action: 'save', params:params)
			} else {
				redirect(controller: 'IIUURegularizacion', action: 'update', params:params)
			}
		} else {

			OrigenIURegularizacion origen

			def nombre = params.nombre

			def origenCriteria = OrigenIURegularizacion.createCriteria().list { like("nombre", nombre) };

			if (!origenCriteria){
				origen = new OrigenIURegularizacion();
				origen.setNombre(params.nombre)
				origen.save(flush: true)
			}

			render ""

		}
	}

	def update = {

		if (!params.nombre){
			if(params.id == "_empty") {
				redirect(controller: 'IIUURegularizacion', action: 'save', params:params)
			} else {
				redirect(controller: 'IIUURegularizacion', action: 'update', params:params)
			}
		} else {


			def origen = OrigenIURegularizacion.get(params.id.toLong())
			if (origen) {
				if (params.version) {
					def version = params.version.toLong()
					if (origen.version > version) {
						render "error"
					}
				}

				def nombre = params.nombre
				def origenCriteria = OrigenIURegularizacion.createCriteria().list { like("nombre", nombre) };

				if (!origenCriteria){
					origen.setNombre(params.nombre)
					origen.save(flush: true)
				}

				if (origen.save(flush: true)) {
					render "success"
				}
				else {
					render "error"
				}
			}
			else {
				render "error"
			}

		}
	}



	def delete(Long id) {
		def origenIURegularizacionInstance = OrigenIURegularizacion.get(id)
		if (!origenIURegularizacionInstance) {
			flash.message = message(code: 'default.not.found.message', args: [
				message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion'),
				id
			])
			redirect(action: "list")
			return
		}

		try {
			origenIURegularizacionInstance.delete(flush: true)
			flash.message = message(code: 'default.deleted.message', args: [
				message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion'),
				id
			])
			redirect(action: "list")
		}
		catch (DataIntegrityViolationException e) {
			flash.message = message(code: 'default.not.deleted.message', args: [
				message(code: 'origenIURegularizacion.label', default: 'OrigenIURegularizacion'),
				id
			])
			redirect(action: "show", id: id)
		}
	}

	def listJson = {

		def sortIndex = params.sidx ?: 'nombre'
		def sortOrder  = params.sord ?: 'asc'
		def maxRows = Integer.valueOf(params.rows)
		def currentPage = Integer.valueOf(params.page) ?: 1
		def rowOffset = currentPage == 1 ? 0 : (currentPage - 1) * maxRows


		def origenes = OrigenIURegularizacion.createCriteria().list(max: maxRows, offset: rowOffset) { order(sortIndex, sortOrder) }

		def totalRows = origenes.totalCount
		def numberOfPages = Math.ceil(totalRows / maxRows)


		def results = origenes?.collect {

			[
				cell: [it.nombre],
				id: it.id
			]
		}


		def jsonData = [rows: results, page: currentPage, records: totalRows, total: numberOfPages]

		render jsonData as JSON
	}




}
